home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 2.iso / dist / fw_glimpse.idb / usr / freeware / src / glimpse-3.0 / index / simpletest.c.z / simpletest.c
C/C++ Source or Header  |  1997-09-09  |  3KB  |  115 lines

  1. /* Copyright (c) 1994 Sun Wu, Udi Manber, Burra Gopal.  All Rights Reserved. */
  2. /* simple tests which don't need to access indexing data structures */
  3. #include <stdio.h>
  4. #include "glimpse.h"
  5. #define b_sample_size   2048    /* the number of bytes sampled to determine
  6.                                    whether a file is binary  */
  7. #define u_sample_size   1024    /* the number of bytes sampled to determine
  8.                                    whether a file is uuencoded */
  9.  
  10. extern UseFilters;
  11.  
  12. #if    0
  13. /* ---------------------------------------------------------------------
  14.    check for binary stream
  15. --------------------------------------------------------------------- */
  16. test_binary(buffer, length)
  17. unsigned char *buffer;
  18. int  length;
  19. {
  20.     int  i=0;
  21.     int  b_count=0;
  22.  
  23.         if(length > b_sample_size) length = b_sample_size;
  24.  
  25.         for(i=0; i<length; i++) {
  26.         if(buffer[i] > 127) b_count++;
  27.     }
  28.         if(b_count*10 >= length) return(1);
  29.         return(0);
  30. }
  31. #else    /*0*/
  32. /* Lets try this one instead: Chris Dalton */
  33. test_binary(buffer, length)
  34. unsigned char *buffer;
  35. int  length;
  36. {
  37.     int permitted_errors;
  38.  
  39.     if (length > b_sample_size) { length= b_sample_size; }
  40.     permitted_errors= length/10;
  41.  
  42.     while (permitted_errors && length--) {
  43.     if (!(isgraph(*buffer) || isspace(*buffer))) --permitted_errors;
  44.     }
  45.     return (permitted_errors == 0);
  46. }
  47. #endif    /*0*/
  48.  
  49. /* ---------------------------------------------------------------------
  50.    check for uuencoded stream
  51. --------------------------------------------------------------------- */
  52. test_uuencode(buffer, length)
  53. unsigned char *buffer;
  54. int  length;
  55. {
  56.         int  i=0;
  57.     int  j;
  58.  
  59.         if(length > u_sample_size) length = u_sample_size;
  60.  
  61.     if(strncmp((char *)buffer, "begin", 5) == 0) {
  62.         i=5;
  63.         goto CONT;
  64.     }
  65.         i = memlook("\nbegin", buffer, length);
  66.     if(i < 0) return(0);
  67. CONT:
  68.     while(buffer[i] != '\n' && i<length) i++;
  69.     if(i == length) return(0);
  70.     i++;
  71.     if(buffer[i] == 'M') {
  72.         if((j=memlook("\nM", &buffer[i], length-i)) < 80) return(1);
  73.     }
  74.     else return(0);
  75. }
  76.  
  77. int
  78. test_postscript(buffer, length)
  79. unsigned char *buffer;
  80. int  length;
  81. {
  82.     int    i=0;
  83.     char    *first;
  84.  
  85.     while((i<length) && (buffer[i] != '\n')) i++;
  86.     if (i>=length) return 0;
  87.     buffer[i] = '\0';
  88.     if ((first = (char *)strstr((char *)buffer, "PS-Adobe")) == NULL) {
  89.         buffer[i] = '\n';
  90.         return 0;
  91.     }
  92.     buffer[i] = '\n';
  93.     return 1;
  94. }
  95.  
  96. char    *suffixlist[NUM_SUFFIXES] = IGNORED_SUFFIXES;
  97.  
  98. int
  99. test_special_suffix(name)
  100.     char    *name;
  101. {
  102.     int    len = strlen(name);
  103.     int    j, i = len-1;
  104.     char    *suffix;
  105.  
  106.     while(i>=0) if (name[i] == '.') break; else i--;
  107.     if (i<0) return 0;    /* no suffix: can be directory... */
  108.     else suffix = &name[i+1];
  109.  
  110.     for (j=0; j<NUM_SUFFIXES; j++)
  111.         if (!strcmp(suffix, suffixlist[j])) break;
  112.     if (j >= NUM_SUFFIXES) return 0;
  113.     return 1;
  114. }
  115.